home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 December / PCWorld_2007-12_cd.bin / v cisle / htttrack / httrack-3.41-3.exe / {app} / src_win / WinHTTrack / trans.cpp < prev    next >
C/C++ Source or Header  |  2006-08-15  |  13KB  |  464 lines

  1. // trans.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Shell.h"
  6. #include "trans.h"
  7.  
  8. extern "C" {
  9.   #include "HTTrackInterface.h"
  10. }
  11.  
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #undef THIS_FILE
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17.  
  18. extern char OPTIONhh[32];
  19. extern char OPTIONmm[32];
  20. extern char OPTIONss[32];
  21. extern HICON httrack_icon;
  22.  
  23. // Chargement des librairies RAS
  24. #if USE_RAS
  25. extern CDynamicRAS* LibRas;
  26. extern int LibRasUse;
  27. #endif
  28.  
  29. // Helper
  30. extern LaunchHelp* HtsHelper;
  31.  
  32. // reference sur objet
  33. extern Ctrans* dialog2;
  34.  
  35. /* Main WizTab frame */
  36. #include "WizTab.h"
  37. extern CWizTab* this_CWizTab;
  38. extern CWizTab* this_intCWizTab2;
  39.  
  40. /* Main splitter frame */
  41. #include "DialogContainer.h"
  42. #include "splitter.h"
  43. extern CSplitterFrame* this_CSplitterFrame;
  44.  
  45. // prise en compte prefs
  46. extern void compute_options() ;
  47.  
  48. /* Back to FirstInfo */
  49. //#include "FirstInfo.h"
  50.  
  51. /* Dialog final */
  52. #include "inprogress.h"
  53.  
  54. /* maintab */
  55. #include "maintab.h"
  56. extern CMainTab* maintab;
  57.  
  58. /* newproj */
  59. #include "newproj.h"
  60. extern CNewProj* dialog0;
  61.  
  62. extern CShellApp* CShellApp_app;
  63.  
  64. /* debug */
  65. extern FILE* fp_debug;
  66.  
  67.  
  68. /////////////////////////////////////////////////////////////////////////////
  69. // Ctrans dialog
  70.  
  71. IMPLEMENT_DYNCREATE(Ctrans, CPropertyPage)
  72.  
  73. Ctrans::Ctrans()
  74.     : CPropertyPage(Ctrans::IDD)
  75. {
  76.   dialog2=this;    /* NOTER REFERENCE */
  77.   hms=0;
  78.     //{{AFX_DATA_INIT(Ctrans)
  79.     m_hh = _T("");
  80.     m_mm = _T("");
  81.     m_ss = _T("");
  82.     m_rasid = -1;
  83.     m_rasdisc = FALSE;
  84.     m_rasshut = FALSE;
  85.     //}}AFX_DATA_INIT
  86. }
  87.  
  88. Ctrans::~Ctrans() {
  89.   dialog2=NULL;
  90. }
  91.  
  92. void Ctrans::DoDataExchange(CDataExchange* pDX)
  93. {
  94.     CPropertyPage::DoDataExchange(pDX);
  95.     //{{AFX_DATA_MAP(Ctrans)
  96.     DDX_Control(pDX, IDC_rasshut, m_ctl_rasshut);
  97.     DDX_Control(pDX, IDC_rasdisc, m_ctl_rasdisc);
  98.     DDX_Control(pDX, IDC_cnx, m_ctlcnx);
  99.     DDX_Control(pDX, IDC_rasid, m_ctlrasid);
  100.     DDX_Control(pDX, IDC_wait, m_ctl_wait);
  101.     DDX_Control(pDX, IDC_ss, m_ctl_ss);
  102.     DDX_Control(pDX, IDC_mm, m_ctl_mm);
  103.     DDX_Control(pDX, IDC_hh, m_ctl_hh);
  104.     DDX_Text(pDX, IDC_hh, m_hh);
  105.     DDV_MaxChars(pDX, m_hh, 2);
  106.     DDX_Text(pDX, IDC_mm, m_mm);
  107.     DDV_MaxChars(pDX, m_mm, 2);
  108.     DDX_Text(pDX, IDC_ss, m_ss);
  109.     DDV_MaxChars(pDX, m_ss, 2);
  110.     DDX_CBIndex(pDX, IDC_rasid, m_rasid);
  111.     DDX_Check(pDX, IDC_rasdisc, m_rasdisc);
  112.     DDX_Check(pDX, IDC_rasshut, m_rasshut);
  113.     //}}AFX_DATA_MAP
  114. }
  115.  
  116.  
  117. BEGIN_MESSAGE_MAP(Ctrans, CPropertyPage)
  118.     //{{AFX_MSG_MAP(Ctrans)
  119.     ON_EN_CHANGE(IDC_hh, OnChangehh)
  120.     ON_WM_HELPINFO()
  121.     ON_CBN_SELCHANGE(IDC_rasid, OnSelchangerasid)
  122.     ON_CBN_DROPDOWN(IDC_rasid, OnDropdownrasid)
  123.     ON_WM_SHOWWINDOW()
  124.     ON_BN_CLICKED(IDC_rasdisc, Onrasdisc)
  125.     //}}AFX_MSG_MAP
  126.     ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  127.   ON_COMMAND(ID_HELP_FINDER,OnHelpInfo2)
  128.   ON_COMMAND(ID_HELP,OnHelpInfo2)
  129.     ON_COMMAND(ID_DEFAULT_HELP,OnHelpInfo2)
  130. END_MESSAGE_MAP()
  131.  
  132. /////////////////////////////////////////////////////////////////////////////
  133. // Ctrans message handlers
  134.  
  135. void Ctrans::OnChangehh() 
  136. {
  137.   CString st="";
  138.   char tempo[256];
  139.  
  140.   // TODO: If this is a RICHEDIT control, the control will not
  141.     // send this notification unless you override the CPropertyPage::OnInitDialog()
  142.     // function to send the EM_SETEVENTMASK message to the control
  143.     // with the ENM_CHANGE flag ORed into the lParam mask.
  144.  
  145.   // TODO: Add your control notification handler code here
  146.  
  147.   GetDlgItemText(IDC_hh,st);
  148.   strcpybuff(tempo,st);
  149.  
  150.   if ((strlen(tempo)>0)!=hms) {
  151.     hms=!hms;
  152.     if (strlen(tempo)>0) {
  153.       m_ctl_wait.ModifyStyle(WS_DISABLED,0);
  154.     }
  155.     else {
  156.       m_ctl_wait.ModifyStyle(0,WS_DISABLED);
  157.     }    
  158.     m_ctl_wait.RedrawWindow();
  159.  }  
  160.  
  161. // m_wait=TRUE; 
  162.  
  163. }
  164.  
  165. BOOL Ctrans::OnInitDialog() 
  166. {
  167.     CPropertyPage::OnInitDialog();
  168.  
  169.   ((CButton*)GetDlgItem(IDC_select_start))->SetCheck(1);
  170.   strcpybuff(RasString,"");
  171.   
  172.   SetIcon(httrack_icon,false);
  173.   SetIcon(httrack_icon,true);  
  174.     EnableToolTips(true);     // TOOL TIPS
  175.  
  176.   // Patcher l'interface pour les Franτais ;-)
  177.   if (LANG_T(-1)) {    // Patcher en franτais
  178.     //SetDlgItemTextCP(this, ,"");
  179.     SetWindowTextCP(this, LANG(LANG_J9) /*"DΘmarrer.."*/);
  180.     SetDlgItemTextCP(this, IDC_select_start,LANG(LANG_J10) /*"Vous pouvez dΘmarrer le miroir en pressant la touche DEMARRER,\nou dΘfinir avant les options de connexion"*/);
  181.     SetDlgItemTextCP(this, IDC_select_save,LANG(LANG_J10b));
  182.     SetDlgItemTextCP(this, IDC_STATIC_delay,LANG(LANG_J11) /*"Retarder"*/);
  183.     SetDlgItemTextCP(this, IDC_wait,LANG(LANG_J12) /*"Attendre avant de commencer jusqu'α: (hh/mm/ss)"*/);
  184.     //SetDlgItemTextCP(this, IDC_avant,LANG(LANG_BACK) /*"<- AVANT"*/);
  185.     SetDlgItemTextCP(this, IDCANCEL,LANG(LANG_QUIT) /*"Quitter"*/);
  186.     SetDlgItemTextCP(this, IDOK,LANG(LANG_J13) /*"DEMARRER!"*/);
  187.     SetDlgItemTextCP(this, IDC_STATIC_ras,LANG(LANG_J14) /*"Connexion provider"*/);
  188.     SetDlgItemTextCP(this, IDC_cnx,LANG(LANG_J15) /*"Connecter α ce provider"*/);
  189.     SetDlgItemTextCP(this, IDC_rasdisc,LANG_J16);
  190.   }
  191.  
  192.   // liste vide pour commencer
  193.   isfilled=FALSE;
  194.   FillProviderList(0);
  195.   m_ctlrasid.SetCurSel(0);
  196.  
  197.     return TRUE;  // return TRUE unless you set the focus to a control
  198.                   // EXCEPTION: OCX Property Pages should return FALSE
  199. }
  200.  
  201.  
  202. void Ctrans::FillProviderList(int fill) 
  203. {
  204. // remplssage su champ des noms de connexion RAS
  205. #if USE_RAS
  206.   if (LibRasUse && fill) {
  207.     DWORD size;
  208.     RASENTRYNAME* adr;
  209.     int count=256;
  210.     size = sizeof(RASENTRYNAME)*(count+2);
  211.     adr = (RASENTRYNAME*) (char*) calloc(size,1);
  212.     if (adr) {
  213.       DWORD ent;
  214.       int i;
  215.       for(i=0;i<count;i++) {
  216.         adr[i].dwSize=sizeof(RASENTRYNAME);
  217.         strcpybuff(adr[i].szEntryName,"");
  218.       }
  219.       if (LibRas->RasEnumEntries(NULL,NULL,(RASENTRYNAME*) adr,&size,&ent) == 0) {
  220.         int i;
  221.         GetDlgItem(IDC_STATIC_ras)->ModifyStyle(WS_DISABLED,0);
  222.         GetDlgItem(IDC_STATIC_ras)->RedrawWindow();
  223.         m_ctlrasid.ResetContent();
  224.         m_ctlrasid.InsertString(-1,LANG(LANG_J2 /*"do not connect to a provider (already connected)","pas de connexion α un provider (dΘja connectΘ)"*/));
  225.         for(i=0;i<(int) ent;i++) {
  226.           m_ctlrasid.InsertString(-1,adr[i].szEntryName);
  227.         }
  228.       }
  229.       free(adr);
  230.     }
  231.   } else
  232. #endif
  233.   {
  234.     if (LibRasUse) {
  235.       GetDlgItem(IDC_STATIC_ras)->ModifyStyle(WS_DISABLED,0);
  236.     } else {
  237.       GetDlgItem(IDC_STATIC_ras)->ModifyStyle(0,WS_DISABLED);
  238.     }
  239.     GetDlgItem(IDC_STATIC_ras)->RedrawWindow();
  240.     m_ctlrasid.ResetContent();
  241.     m_ctlrasid.InsertString(-1,LANG_J2b);
  242.   }
  243. }
  244.  
  245.  
  246. // ------------------------------------------------------------
  247. // TOOL TIPS
  248. //
  249. // ajouter dans le .cpp:
  250. // remplacer les deux Wid1:: par le nom de la classe::
  251. // dans la message map, ajouter
  252. // ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  253. // dans initdialog ajouter
  254. // EnableToolTips(true);     // TOOL TIPS
  255. //
  256. // ajouter dans le .h:
  257. // char* GetTip(int id);
  258. // et en generated message map
  259. // afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  260. BOOL Ctrans::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  261. {
  262.   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  263.   UINT_PTR nID =pNMHDR->idFrom;
  264.   if (pTTT->uFlags & TTF_IDISHWND)
  265.   {
  266.     // idFrom is actually the HWND of the tool
  267.     nID = ::GetDlgCtrlID((HWND)nID);
  268.     if(nID)
  269.     {
  270.       char* st=GetTip((int)nID);
  271.       if (st != "") {
  272.         pTTT->lpszText = st;
  273.         pTTT->hinst = AfxGetResourceHandle();
  274.         return(TRUE);
  275.       }
  276.     }
  277.   }
  278.   return(FALSE);
  279. }
  280. char* Ctrans::GetTip(int ID)
  281. {
  282.   switch(ID) {
  283.   case IDC_rasid: return LANG_J8b; break;
  284.     case IDC_hh: case IDC_mm: case IDC_ss: 
  285.       return LANG(LANG_J3); break; // "Schedule the mirror","Programmer un miroir"); break;
  286.     case IDCANCEL:  return LANG(LANG_J4); break; // "Quit WinHTTrack","Quitter WinHTTrack"); break;
  287.     case IDC_avant: return LANG(LANG_J5); break; // "Back to the start page","Retour α la premiΦre page"); break;
  288.     case IDOK:      return LANG(LANG_J6); break; // "Click to start!","Clic pour dΘmarrer!"); break;
  289.     case IDC_rasdisc: return LANG_J17; break;
  290.     //case : return ""; break;
  291.   }
  292.   return "";
  293. }
  294. // TOOL TIPS
  295. // ------------------------------------------------------------
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302. // Appel aide
  303. void Ctrans::OnHelpInfo2() {
  304.   (void) OnHelpInfo(NULL);
  305. }
  306.  
  307. BOOL Ctrans::OnHelpInfo(HELPINFO* dummy) 
  308. {
  309.   //return CPropertyPage::OnHelpInfo(pHelpInfo);
  310.   HtsHelper->Help();
  311.   return true;
  312.   //AfxGetApp()->WinHelp(0,HELP_FINDER);    // Index du fichier Hlp
  313.   //return true;
  314. }
  315.  
  316. void Ctrans::OnSelchangerasid() 
  317. {
  318.   m_ctl_rasdisc.SetCheck(1);
  319.   int r = m_ctlrasid.GetCurSel();
  320.   if (r!=CB_ERR) {
  321.     if (r==0) {
  322.       m_ctlcnx.ModifyStyle(0,WS_DISABLED); 
  323.     } else {
  324.       m_ctlcnx.ModifyStyle(WS_DISABLED,0); 
  325.     }
  326.     m_ctlcnx.RedrawWindow();
  327.   }
  328. }
  329.  
  330. BOOL Ctrans::OnWizardFinish( )
  331. {
  332.   BOOL DoLaunchMirror = ((CButton*)GetDlgItem(IDC_select_start))->GetCheck();
  333.  
  334.     // TODO: Add extra validation here
  335.   int r = m_ctlrasid.GetCurSel();
  336.   strcpybuff(RasString,"");
  337.   if ((r!=CB_ERR) && (r != 0)) {    // sΘlection provider
  338.     if (m_ctlrasid.GetLBText(r,RasString) != CB_ERR) {
  339.       if (strlen(RasString)>0) {
  340.         //
  341. #if USE_RAS
  342.         if (LibRasUse) {
  343.           if (strlen(RasString)>0) {    // sΘlection provider
  344.             BOOL ifpass;
  345.             dial.dwSize = sizeof(dial);
  346.             strcpybuff(dial.szEntryName,RasString);
  347.             strcpybuff(dial.szPhoneNumber,"");
  348.             strcpybuff(dial.szCallbackNumber,"");
  349.             strcpybuff(dial.szUserName,"");
  350.             strcpybuff(dial.szPassword,"");
  351.             strcpybuff(dial.szDomain,"");
  352.             if (!LibRas->RasGetEntryDialParams(NULL,&dial,&ifpass)) {
  353.               if (!ifpass) {    // pas de pass
  354.                 AfxMessageBox(LANG(LANG_J7 /*"No saved password for this connection!","Pas de mot de passe sauvΘ pour cette connexion!"*/));
  355.                 return 0;    // cancel
  356.               }
  357.             } else {
  358.               AfxMessageBox(LANG(LANG_J8 /*"Can not get RAS setup","Impossible d'obtenir les paramΦtres de connexion"*/));
  359.               return 0;    // cancel
  360.             }
  361.           }
  362.         }
  363. #endif
  364.         //
  365.       }
  366.     }
  367.   }
  368.  
  369.   /* prise en compte des options */
  370.   UpdateData(TRUE);         // DoDataExchange
  371.   compute_options() ;
  372.  
  373.   // Index "top" si nΘcessaire!
  374.   if (maintab->m_option3.m_windebug) {
  375.     fp_debug=fopen("winhttrack.log","wb");
  376.   } else {
  377.     fp_debug = NULL;
  378.   }
  379.   if (fp_debug) {
  380.     fprintf(fp_debug,"Writing winprofile.ini\r\n");
  381.     fflush(fp_debug);
  382.   }
  383.   /*
  384.   {
  385.     char path[1024];
  386.     strcpybuff(path,dialog0->GetBasePath());
  387.     make_empty_index(path);
  388.   }
  389.   */
  390.   
  391.   // sauver profile dans hts-cache si besoin est
  392.   //if(maintab->m_option3.m_cache) {
  393.   Save_current_profile(0);
  394.   //}
  395.   // FIN sauver profile dans hts-cache si besoin est
  396.   if (fp_debug) {
  397.     if (DoLaunchMirror)
  398.       fprintf(fp_debug,"Profile written, launching mirror\r\n");
  399.     else
  400.       fprintf(fp_debug,"Profile written, saving settings\r\n");
  401.     fflush(fp_debug);
  402.   }
  403.   CShellApp_app->end_path=dialog0->GetBasePath();
  404.   CShellApp_app->end_path_complete=dialog0->GetPath();
  405.  
  406.   if (DoLaunchMirror) {
  407.     /* Switcher sur Cinprogress! */
  408.     /*this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(Cinprogress));*/
  409.     this_CWizTab->ModifyStyle(WS_VISIBLE,0,0);
  410.     this_CWizTab->RedrawWindow();
  411.     //
  412.     //{
  413.     //  CWizTab* tmp;
  414.     //  tmp=this_CWizTab;
  415.     this_CWizTab=this_intCWizTab2;
  416.     //  this_CWizTab2=tmp;
  417.     //}
  418.     //
  419.     this_CWizTab->ModifyStyle(0,WS_VISIBLE,0);
  420.     this_CWizTab->ModifyStyle(WS_DISABLED,0,0);
  421.     this_CSplitterFrame->RedrawWindow();
  422.     this_CWizTab->FinalInProgress();
  423.     // Lancement du miroir
  424.     LaunchMirror();
  425.   } else {      /* Ok, saved, exit (new project) */
  426.     Build_TopIndex();
  427.     this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  428.   }
  429.  
  430.     return 0;
  431. }
  432.  
  433. void Ctrans::OnDropdownrasid() 
  434. {
  435. #if USE_RAS
  436.   if (!isfilled) {
  437.     isfilled=TRUE;
  438.     InitRAS();
  439.     FillProviderList(1);
  440.   }
  441. #endif
  442. }
  443.  
  444. BOOL Ctrans::OnSetActive( ) {
  445.   this_CWizTab->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
  446.   WHTT_LOCATION("trans");
  447.   return 1;
  448. }
  449.  
  450. BOOL Ctrans::OnQueryCancel( ) {
  451.   this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  452.   return 0;
  453. }
  454.  
  455. BOOL Ctrans::OnKillActive( ) {
  456.   UpdateData(TRUE);         // DoDataExchange
  457.   return 1;
  458. }
  459.  
  460. void Ctrans::Onrasdisc() 
  461. {
  462.   InitRAS();
  463. }
  464.